﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
using Triunfadores.BusinessEntities;

namespace Triunfadores.Repository.Mapping
{
    public class ClienteMap:EntityTypeConfiguration<Cliente>
    {
        public ClienteMap()
        {
            //primary key y indentidad=true
            this.HasKey(so => so.Id);
            this.Property(so => so.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            //propiedades
            this.Property(so => so.Apellidos)
                .HasColumnType("varchar")
                .HasMaxLength(50)
                .IsRequired();
            this.Property(so => so.CentroTrabajo)
                .HasColumnType("varchar")
                .HasMaxLength(100)
                .IsOptional();
            this.Property(so => so.Direccion)
                .HasColumnType("varchar")
                .HasMaxLength(150)
                .IsRequired();
            this.Property(so => so.Dni)
                .HasColumnType("char")
                .HasMaxLength(8)
                .IsRequired();
            this.Property(so => so.Email)
                .HasColumnType("varchar")
                .HasMaxLength(50)
                .IsOptional();
            this.Property(so => so.Barrio)
                .HasColumnType("varchar")
                .HasMaxLength(150)
                .IsRequired();
            this.Property(so => so.EstadoCivil)
                .HasColumnType("varchar")
                .HasMaxLength(10)
                .IsRequired();
            this.Property(so => so.Estado)
                .HasColumnType("bit")
                .IsRequired();
            this.Property(so => so.Empleado)
                .HasColumnType("bit")
                .IsRequired();
            this.Property(so => so.Sexo)
                .HasColumnType("char")
                .HasMaxLength(1)
                .IsRequired();
            this.Property(so => so.FechIngreso)
                .HasColumnType("datetime2")
                .IsRequired();
            this.Property(so => so.FechNacimiento)
                .HasColumnType("datetime2")
                .IsRequired();
            this.Property(so => so.FechRetiro)
                .HasColumnType("datetime2")
                .IsOptional();
            this.Property(so => so.Nombres)
                .HasColumnType("varchar")
                .HasMaxLength(50)
                .IsRequired();
            this.Property(so => so.NroHijos)
                .HasColumnType("char")
                .HasMaxLength(2)
                .IsRequired();
            this.Property(so => so.Ocupacion)
                .HasColumnType("varchar")
                .HasMaxLength(50)
                .IsOptional();
            this.Property(so => so.TelefonoFijo)
                .HasColumnType("varchar")
                .HasMaxLength(11)
                .IsOptional();
            this.Property(so => so.Telefono)
                .HasColumnType("varchar")
                .HasMaxLength(11)
                .IsRequired();
            this.Property(so => so.Telefono1)
                .HasColumnType("varchar")
                .HasMaxLength(11)
                .IsOptional();
            this.Property(so => so.TipoVivienda)
                .HasColumnType("varchar")
                .HasMaxLength(9)
                .IsRequired();
            this.Property(so => so.TelOficina)
                .HasColumnType("varchar")
                .HasMaxLength(11)
                .IsOptional();
            this.Property(so => so.TelCelular)
                .HasColumnType("varchar")
                .HasMaxLength(11)
                .IsOptional();
            this.Property(so => so.TelCelular2)
                .HasColumnType("varchar")
                .HasMaxLength(11)
                .IsOptional();


            //relaciones
            //un cliente va a tener un tipo
            this.HasRequired(cp => cp.TipoCliente)
                .WithMany(cp => cp.IcClientes)
                .HasForeignKey(cp => cp.IdTipoCliente)
                .WillCascadeOnDelete(false);

            //un cliente va a tener un ubigeo
            //lugar de nacimiento
            this.HasRequired(cp => cp.LugarNacimiento)
                .WithMany(cp => cp.IcUbigeoClientes)
                .HasForeignKey(cp => cp.IdLugarNacimiento)
                .WillCascadeOnDelete(false);
            //centro trabajo
            this.HasOptional(cp => cp.DirecCentTrabajo)
                .WithMany(cp => cp.IcUbigeoCentTrabajo)
                .HasForeignKey(cp => cp.IdDirecCentTrabajo)
                .WillCascadeOnDelete(false);
            //Lugar de la casa
            this.HasRequired(cp => cp.LugarCasa)
                .WithMany(cp => cp.IcUbigeoDirecCasa)
                .HasForeignKey(cp => cp.IdLugarCasa)
                .WillCascadeOnDelete(false);

        }
    }
}
